/*
 * @Author: your name
 * @Date: 2021-06-07 13:38:51
 * @LastEditTime: 2021-06-16 16:54:47
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \UDP\CLIENT_\manager.h
 */
#include "user.h"
#include "consumer.h"
#include "merchant.h"
#include "clientsocket.h"
#include "case.h"
#include "parse.h"
#include "guide.h"
//控制输入密码为*使用
# include<termios.h>
#include<stdio.h>
#include<string>
#include <string.h>

#define MIN_PASSWD_LENGTH 8 //最短密码长度

class Manager
{
private:
    //管理当前用户的指针
    User* m_user;
    //标记当前用户是否登录
    bool isLogin;
public:
    //构造函数
    Manager();
    //析构函数
    ~Manager();

    //输入数字选择选项
    int input_Choice();



    //--------------初始界面主函数--------------------
    //注册函数
    void regist(ClientSocket& c_socket);

    //登录函数
    bool login(ClientSocket& c_socket);

    //展示商品
    void show_Commodity(ClientSocket& c_socket);

    //退出系统
    void exit_exe();

    //--------------登录界面函数--------------

    //搜索商品
    void search_Commodity(ClientSocket& c_socket);

    //查看购物车
    void show_Cart(ClientSocket& c_socket);

    //添加购物车
    bool add_Cart(ClientSocket& c_socket);

    //修改购物车
    bool modify_Cart(ClientSocket& c_socket);

    //订单功能
    bool create_Order(ClientSocket& c_socket);

    //查看余额
    void show_Balance();

    //充值余额
    void recharge_Amount(ClientSocket& c_socket);

    //修改密码
    bool change_Passwd(ClientSocket& c_socket);

    //退出登录
    void logout();

    //--------------商家独有界面函数--------------

    //添加商品
    void add_Commodity(ClientSocket& c_socket);

    //修改商品
    void modify_Commodity(ClientSocket& c_socket);


    //-------------辅助函数---------------

    //获取用户名
    string get_Name();

    //获取用户密码
    string get_Passwd();

    //检验密码强度
    bool judge_Passwd_Strength(const string& passwd);

    //获取当前登录状态
    bool get_Login_Statu();

    //获取登陆者类型
    USERTYPE get_User_Type();

    //获取一个介于A，B之间的int数据
    int get_Mid_Num(int A,int B);
    double get_Mid_Num(double A,double B);

    //给定商品identifier，返回商品
    bool get_Com_By_Id(int id,ClientSocket& c_socket,commodity& com);

    //---------功能验证函数--------------
    //展示结构体信息
    void show_struct_info(info tinfo);
};
